package jvm.autoMemoryManagement;

import java.io.BufferedReader;
import java.io.InputStreamReader;

/**
 * @author msi
 */
public class ThreadDeadLockTestCase_1 {
    /**
     * 线程死循环演示
     */
    public static void createBusyThread() {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                while (true)   // 第17行
                    ;
            }
        }, "testBusyThread");
        thread.start();
    }

    /**
     * 线程锁等待演示
     */
    public static void createLockThread(final Object lock) {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (lock) {
                    try {
                        lock.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }, "testLockThread");
        thread.start();
    }

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//        br.readLine(); 要屏蔽掉才能执行下面的代码
        createBusyThread();
//        br.readLine();
        Object obj = new Object();
        createLockThread(obj);
    }

}

/**
 * 步骤及结果：
 *      1.在JConsole中的线程tag选择mian线程， 堆栈显示BufferedReader的readBytes()方法一直在等待System.in的输入，此时线程状态为runnable状态。
 *      2.接着查看testBusyThread线程，该线程是runnable状态。该线程一直在执行空循环，并且代码一直停留在18行。
 *      3.接着查看testLockThread线程，该线程是waiting状态，需要调用notify才能重新执行该线程。
 *      4.
 */
